﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.Configuration;
using Rizmar.RizmarDataSetTableAdapters;


namespace Rizmar
{
    public partial class ClienteForm : Form
    {
        internal int n_descontos;
        internal List<Desconto> descontos;
        Form parent;
        //Desconto parentDesconto;

        public enum StatusDesconto
        {
            inserindo,
            salvo
        }

        public int getn_descontos()
        {
            return n_descontos;
        }

        private StatusDesconto statusDesc;

        public enum StatusClienteCadastro 
        {
            inserindo,
            navegando,
            editando,
            novoCliente,
            mudandoAlgumaCoisinha
        }

        private StatusClienteCadastro status;

        public ClienteForm()
        {
            descontos = new List<Desconto>();
            n_descontos = 0;
            status = StatusClienteCadastro.inserindo;
            statusDesc = StatusDesconto.inserindo;
            InitializeComponent();
        }

        public void setStatusDesconto(StatusDesconto sd)
        {
            statusDesc = sd;
        }

        public StatusDesconto getStatusDesconto()
        {
            return statusDesc;
        }

        public ClienteForm(Form form)
        {
            descontos = new List<Desconto>();
            n_descontos = 0;

            if (form is MainForm)
                parent = (form as MainForm);
            if (form is PesquisaClienteForm)
                parent = (form as PesquisaClienteForm);
            if (parent is MainForm)
               status = StatusClienteCadastro.inserindo;
            if (parent is PesquisaClienteForm)
                status = StatusClienteCadastro.novoCliente;
            InitializeComponent();
        }

        public void setStatus(StatusClienteCadastro s)
        {
            status = s;
        }

        public StatusClienteCadastro getStatus()
        {
            return status;
        }

        private bool Completo() 
        {
            if (idTextBox.Text == string.Empty)
            {
                MessageBox.Show("O campo ID está em branco");
                idTextBox.Focus();
                status = StatusClienteCadastro.mudandoAlgumaCoisinha;
                return false;
            }
            if (nomeTextBox.Text == string.Empty)
            {
                MessageBox.Show("O campo nome está em branco");
                nomeTextBox.Focus();
                status = StatusClienteCadastro.mudandoAlgumaCoisinha;
                return false;
            }
            if (estadoTextBox.Text.Length > 2)
            {
                MessageBox.Show("Utilize somente abreviações para Estado");
                estadoTextBox.Focus();
                status = StatusClienteCadastro.mudandoAlgumaCoisinha;
                return false;
            }
            if (cpfRadioButton.Checked)
            {
                if (documentoTextBox.Text.Length < 14)
                {
                    MessageBox.Show("O campo documento não está completo");
                    documentoTextBox.Focus();
                    status = StatusClienteCadastro.mudandoAlgumaCoisinha;
                    return false;
                }
            }
            else
            {
                if (documentoTextBox.Text.Length < 18)
                {
                    MessageBox.Show("O campo documento não está completo");
                    documentoTextBox.Focus();
                    status = StatusClienteCadastro.mudandoAlgumaCoisinha;
                    return false;
                }
            }
            return true;
        }

        private void sairButton_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private bool validaCpf(string cpf)
        {
          
            int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            string tempCpf;
            string digito;
            int soma;
            int resto;
            cpf = cpf.Trim();
            cpf = cpf.Replace(".", "").Replace(",", "").Replace("-", "");
            if (cpf.Length != 11)
                return false;
            tempCpf = cpf.Substring(0, 9);
            soma = 0;
            for (int i = 0; i < 9; i++)
                soma += int.Parse(tempCpf[i].ToString()) * multiplicador1[i];
            resto = soma % 11;
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;
            digito = resto.ToString();
            tempCpf = tempCpf + digito;
            soma = 0;
            for (int i = 0; i < 10; i++)
                soma += int.Parse(tempCpf[i].ToString()) * multiplicador2[i];
            resto = soma % 11;
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;
            digito = digito + resto.ToString();
            return cpf.EndsWith(digito);
        }

        private bool validaCnpj(string cnpj)
        {
            int[] multiplicador1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] multiplicador2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int soma;
            int resto;
            string digito;
            string tempCnpj;
            cnpj = cnpj.Trim();
            cnpj = cnpj.Replace(".", "").Replace(",", "").Replace("-", "").Replace("/", "");
            if (cnpj.Length != 14) return false;
            tempCnpj = cnpj.Substring(0, 12);
            soma = 0;
            for (int i = 0; i < 12; i++)
                soma += int.Parse(tempCnpj[i].ToString()) * multiplicador1[i];
            resto = (soma % 11);
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;
            digito = resto.ToString();
            tempCnpj = tempCnpj + digito;
            soma = 0;
            for (int i = 0; i < 13; i++)
                soma += int.Parse(tempCnpj[i].ToString()) * multiplicador2[i];
            resto = (soma % 11);
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;
            digito = digito + resto.ToString();
            return cnpj.EndsWith(digito);
        }

        private void numeroTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
                e.Handled = true;
            tabControl_KeyPress(sender, e);
        }

        private void limiteTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != ',')
                e.Handled = true;
            if (e.KeyChar == '.' && (limiteTextBox.Text.Contains(".") || limiteTextBox.Text.Contains(",")))
                e.Handled = true;
            if (e.KeyChar == ',' && (limiteTextBox.Text.Contains(",")||limiteTextBox.Text.Contains(".")))
                e.Handled = true;
            if (limiteTextBox.Text.Contains(".") && (limiteTextBox.Text.Length - limiteTextBox.Text.IndexOf('.') >= 3) && !char.IsControl(e.KeyChar))
                e.Handled = true;
            if (limiteTextBox.Text.Contains(",") && (limiteTextBox.Text.Length - limiteTextBox.Text.IndexOf(',') >= 3) && !char.IsControl(e.KeyChar))
                e.Handled = true;
            tabControl_KeyPress(sender, e);
        }

        private void duplicataTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != ',')
                e.Handled = true;
            if (e.KeyChar == '.' && (duplicataTextBox.Text.Contains(".") || duplicataTextBox.Text.Contains(",")))
                e.Handled = true;
            if (e.KeyChar == ',' && (duplicataTextBox.Text.Contains(",") || duplicataTextBox.Text.Contains(".")))
                e.Handled = true;
            if (duplicataTextBox.Text.Contains(".") && (duplicataTextBox.Text.Length - duplicataTextBox.Text.IndexOf('.') >= 3) && !char.IsControl(e.KeyChar))
                e.Handled = true;
            if (duplicataTextBox.Text.Contains(",") && (duplicataTextBox.Text.Length - duplicataTextBox.Text.IndexOf(',') >= 3) && !char.IsControl(e.KeyChar))
                e.Handled = true;
            tabControl_KeyPress(sender, e);
        }

        private void taxaTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != ',')
                e.Handled = true;
            if (e.KeyChar == '.' && (taxaTextBox.Text.Contains(".") || taxaTextBox.Text.Contains(",")))
                e.Handled = true;
            if (e.KeyChar == ',' && (taxaTextBox.Text.Contains(",") || taxaTextBox.Text.Contains(".")))
                e.Handled = true;
            if (taxaTextBox.Text.Contains(".") && (taxaTextBox.Text.Length - taxaTextBox.Text.IndexOf('.') >= 3) && !char.IsControl(e.KeyChar))
                e.Handled = true;
            if (taxaTextBox.Text.Contains(",") && (taxaTextBox.Text.Length - taxaTextBox.Text.IndexOf(',') >= 3) && !char.IsControl(e.KeyChar))
                e.Handled = true;
            tabControl_KeyPress(sender, e);
        }

        private void admTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar) && e.KeyChar != '.' && e.KeyChar != ',')
                e.Handled = true;
            if (e.KeyChar == '.' && (admTextBox.Text.Contains(".") || admTextBox.Text.Contains(",")))
                e.Handled = true;
            if (e.KeyChar == ',' && (admTextBox.Text.Contains(",") || admTextBox.Text.Contains(".")))
                e.Handled = true;
            if (admTextBox.Text.Contains(".") && (admTextBox.Text.Length - admTextBox.Text.IndexOf('.') >= 3) && !char.IsControl(e.KeyChar))
                e.Handled = true;
            if (admTextBox.Text.Contains(",") && (admTextBox.Text.Length - admTextBox.Text.IndexOf(',') >= 3) && !char.IsControl(e.KeyChar))
                e.Handled = true;
            tabControl_KeyPress(sender, e);
        }

        private void pesquisarButton_Click(object sender, EventArgs e)
        {
            if (status != StatusClienteCadastro.novoCliente)
            {
                PesquisaClienteForm form = new PesquisaClienteForm(this);
                form.ShowDialog();
            }
        }

        private void novoButton_Click(object sender, EventArgs e)
        {
            if (status == StatusClienteCadastro.editando || status == StatusClienteCadastro.navegando)
            {
                limpaCadastro();
                status = StatusClienteCadastro.inserindo;
                idTextBox.Enabled = true;
                return;
            }
            if (status == StatusClienteCadastro.inserindo || status == StatusClienteCadastro.novoCliente || status == StatusClienteCadastro.mudandoAlgumaCoisinha)
            {
                MessageBox.Show("Salve o cadastro atual antes de cadastrar um novo cliente!");
                return;
            }
        }

        private void limpaCadastro()
        {
            foreach (Control c in this.splitContainer1.Panel1.Controls)
            {
                if (c is TextBox)
                    (c as TextBox).Clear();
                if (c is ComboBox)
                {
                    (c as ComboBox).Items.Clear();
                    (c as ComboBox).Text = "";
                }
            }
            foreach (Control c in this.splitContainer1.Panel2.Controls)
                if (c is TextBox)
                    (c as TextBox).Clear();
            documentoTextBox.Clear();
            
        }

        private void incluirButton_Click(object sender, EventArgs e)
        {
            ClienteTableAdapter cta = new ClienteTableAdapter();
            RizmarDataSet.ClienteDataTable cdt = new RizmarDataSet.ClienteDataTable();

            String nome, documento, email, logradouro, complemento, bairro, cep, cidade, estado, obs;
            int id, d;
            int? numero;
            decimal limite, taxa, adm, duplicata;
            
            if (status == StatusClienteCadastro.inserindo || status == StatusClienteCadastro.novoCliente || status == StatusClienteCadastro.mudandoAlgumaCoisinha) 
            {
                if (Completo())
                {
                    if (documentoValido(documentoTextBox.Text))
                    {
                        setClientFields(out id, out nome, out  documento, out email,  out logradouro, out  numero, out complemento, out  bairro, out cep, out cidade, out estado, out obs, out limite, out  taxa, out adm, out duplicata, out d);
                        if (cta.Insert(id, nome,  documento, email, logradouro, numero, complemento, bairro, cep, cidade, estado, obs, limite, taxa, adm, duplicata, d, true) > 0)
                        {
                           
                        }
                        
                            int i = 0;
                            TelefoneClienteTableAdapter tcta = new TelefoneClienteTableAdapter();
                            while (i < telefoneComboBox.Items.Count)
                            {
                                if (tcta.Insert(id, telefoneComboBox.Items[i].ToString(), contatoComboBox.Items[i].ToString()) > 0)
                                    
                                i++;
                            }
                        
                        MessageBox.Show("Dados salvos com sucesso!");
                        status = StatusClienteCadastro.navegando;
                        return; 
                    }
                        else
                        {
                            MessageBox.Show("Documento inválido!");
                            documentoTextBox.Focus();
                            documentoTextBox.SelectAll();
                        }
                   }
            }
            if (status == StatusClienteCadastro.editando) 
            {
                setClientFields(out id, out nome, out  documento, out email, out logradouro, out  numero, out complemento, out  bairro, out cep, out cidade, out estado, out obs, out limite, out  taxa, out adm, out duplicata, out d);

                int i = 0;
                TelefoneClienteTableAdapter tcta = new TelefoneClienteTableAdapter();
                while (i < telefoneComboBox.Items.Count)
                {
                    RizmarDataSet.TelefoneClienteDataTable tcdt = new RizmarDataSet.TelefoneClienteDataTable();
                    tcdt = tcta.PesquisaPorTelefone(telefoneComboBox.Items[i].ToString());
                    if (tcdt.Rows.Count <= 0)
                        tcta.Insert(id, telefoneComboBox.Items[i].ToString(), contatoComboBox.Items[i].ToString());
                    i++;
                }
                    
                if (cta.Update( nome, documento, email, logradouro, numero, complemento, bairro, cep, cidade, estado, obs, limite, taxa, adm, duplicata, d,true,id) > 0)
                {
                    MessageBox.Show("Dados atualizados com sucesso!");
                    status = StatusClienteCadastro.navegando;
                    return;
                }
                               
            }
            if (status == StatusClienteCadastro.navegando)
            {
                MessageBox.Show("Para inserir um novo cadastro aperte novo. Para alterar um cadastro já existente escolha o cadastro a ser alterado em pesquisar.");
            }
        }

        private bool documentoValido(string doc)
        {
            if (cpfRadioButton.Checked)
                return validaCpf(doc);
            else
                return validaCnpj(doc);
        }

        private void setClientFields(out int id, out string nome, out string documento, out string email, out string logradouro, out int? numero, out string complemento, out string bairro, out string cep, out string cidade, out string estado, out string obs, out decimal limite, out decimal taxa, out decimal adm, out decimal duplicata, out int d)
        {
            id = Convert.ToInt32(idTextBox.Text);
            nome = nomeTextBox.Text;
            documento = documentoTextBox.Text;
            if (emailTextBox.Text == string.Empty)
                email = null;
            else
                email = emailTextBox.Text;
            if (logradouroTextBox.Text == string.Empty)
                logradouro = null;
            else
                logradouro = logradouroTextBox.Text;
            if (bairroTextBox.Text == string.Empty)
                bairro = null;
            else
                bairro = bairroTextBox.Text;
            if (cEPTextBox.Text == string.Empty)
                cep = null;
            else
                cep = cEPTextBox.Text;
            if (cidadeTextBox.Text == string.Empty)
                cidade = null;
            else
                cidade = cidadeTextBox.Text;
            if (estadoTextBox.Text == string.Empty)
                estado = null;
            else
                estado = estadoTextBox.Text;
            if (numeroTextBox.Text == string.Empty)
                numero = null;
            else
                numero = Convert.ToInt32(numeroTextBox.Text);
            if (limiteTextBox.Text == string.Empty)
                limite = 0;
            else
                limite = Convert.ToDecimal(limiteTextBox.Text.Replace('.', ','));
            if (taxaTextBox.Text == string.Empty)
                taxa = 0;
            else
                taxa = Convert.ToDecimal(taxaTextBox.Text.Replace('.', ','));
            if (admTextBox.Text == string.Empty)
                adm = 0;
            else
                adm = Convert.ToDecimal(admTextBox.Text.Replace('.', ','));
            if (dTextBox.Text == string.Empty)
                d = 0;
            else
                d = Convert.ToInt32(dTextBox.Text);
            if (complementoTextBox.Text == string.Empty)
                complemento = null;
            else
                complemento = complementoTextBox.Text;
            if (obsTextBox.Text == string.Empty)
                obs = null;
            else
                obs = obsTextBox.Text;
            if (duplicataTextBox.Text == string.Empty)
                duplicata = 0;
            else
                duplicata = Convert.ToDecimal(duplicataTextBox.Text.Replace('.', ','));
            
        }
 
        private void tabPage2_Enter(object sender, EventArgs e)
        {
            if (idTextBox.Text != string.Empty)
            {
                this.tituloTableAdapter.PreencheClienteEspecifico(this.rizmarDataSet.Titulo,Convert.ToInt32(idTextBox.Text));
            }
            settotalLabel();
        }

        private void tabControl_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '\r')
            {
               
                    e.Handled = true;
                    if (status != StatusClienteCadastro.mudandoAlgumaCoisinha)
                        System.Windows.Forms.SendKeys.Send("{TAB}");
                    else
                        incluirButton.Focus();
                
            }
        }

        private void obsTextBox_Leave(object sender, EventArgs e)
        {
            limiteTextBox.Focus();
        }

        private void admTextBox_MouseLeave(object sender, EventArgs e)
        {
            incluirButton.Focus();
        }

        private void deletarButton_Click(object sender, EventArgs e)
        {
            ClienteTableAdapter cta = new ClienteTableAdapter();
            if (status == StatusClienteCadastro.editando)
            {
                if (cta.ExcluiLogicamente(false, Convert.ToInt32(idTextBox.Text)) > 0)
                {
                    status = StatusClienteCadastro.inserindo;
                    idTextBox.Enabled = true;
                    limpaCadastro();
                    MessageBox.Show("Cliente excluído com sucesso!");
                    return;
                }
            }
            else 
            {
                MessageBox.Show("Para excluir um cliente, primeiro pesquise-o.");
            }
        }

        private void idTextBox_Leave(object sender, EventArgs e)
        {
            if (idTextBox.Text != string.Empty)
            {
                RizmarDataSet.ClienteDataTable cdt = new RizmarDataSet.ClienteDataTable();
                ClienteTableAdapter cta = new ClienteTableAdapter();
                cdt = cta.PesquisaPorID(Convert.ToInt32(idTextBox.Text));
                if (cdt.Rows.Count > 0)
                {
                    MessageBox.Show("Esse ID já está cadastrado!");
                    idTextBox.Enabled = true;
                    idTextBox.Focus();
                }
            }
            
        }

        private void documentoTextBox_TextChanged(object sender, EventArgs e)
        {
            if (cpfRadioButton.Checked)
            {
                if (documentoTextBox.Text.Length == 3 || documentoTextBox.Text.Length == 7)
                    documentoTextBox.AppendText(".");
                if (documentoTextBox.Text.Length == 11)
                    documentoTextBox.AppendText("-");
            }
            else
            {
                if (documentoTextBox.Text.Length == 2 || documentoTextBox.Text.Length == 6)
                    documentoTextBox.AppendText(".");
                if (documentoTextBox.Text.Length == 10)
                    documentoTextBox.AppendText("/");
                if (documentoTextBox.Text.Length == 15)
                    documentoTextBox.AppendText("-");
            }
        }

        private void documentoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar.Equals(Convert.ToChar(Keys.Back)))
            {
                if (documentoTextBox.Text.EndsWith(".") || documentoTextBox.Text.EndsWith("-") || documentoTextBox.Text.EndsWith("/"))
                {
                    e.Handled = true;
                    documentoTextBox.Text = documentoTextBox.Text.Remove(documentoTextBox.Text.Length - 1);
                    documentoTextBox.Text = documentoTextBox.Text.Remove(documentoTextBox.Text.Length - 2);
                    documentoTextBox.Select(documentoTextBox.Text.Length, 0);
                }

            }
            if (char.IsDigit(e.KeyChar))
                if (cpfRadioButton.Checked)
                {
                    if (documentoTextBox.Text.Length == 14)
                        e.Handled = true;
                }
                else
                    if (documentoTextBox.Text.Length == 18)
                        e.Handled = true;
            numeroTextBox_KeyPress(sender, e);
        }

        private void cpfRadioButton_CheckedChanged(object sender, EventArgs e)
        {
            documentoTextBox.Clear();
            documentoTextBox.Focus();
        }

        private void telefoneComboBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!char.IsDigit(e.KeyChar) && !char.IsControl(e.KeyChar))
                e.Handled = true;
            if (e.KeyChar == '\r')
            {
                System.Windows.Forms.SendKeys.Send("{TAB}");
            }
        }

        private void contatoComboBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            
            if (e.KeyChar == '\r')
            {
                System.Windows.Forms.SendKeys.Send("{TAB}");
            }
        }

        private void telefoneComboBox_SelectedValueChanged(object sender, EventArgs e)
        {
            contatoComboBox.Text = contatoComboBox.Items[telefoneComboBox.SelectedIndex].ToString();
        }

        private void contatoComboBox_SelectedValueChanged(object sender, EventArgs e)
        {
            telefoneComboBox.Text = telefoneComboBox.Items[contatoComboBox.SelectedIndex].ToString();
        }

        private void ClienteForm_Load(object sender, EventArgs e)
        {
            atualizaDataGrid();
            
            idTextBox.Focus();
        }

        private void atualizaDataGrid() 
        {
            if (idTextBox.Text != string.Empty)
            {
                this.tituloTableAdapter.PreencheClienteEspecifico(this.rizmarDataSet.Titulo, Convert.ToInt32(idTextBox.Text));
            }
            settotalLabel();
            
        }

        public void atualizaDescontos() 
        {
            n_descontos = 0;
            if (idTextBox.Text != string.Empty)
            {
                DescontoTableAdapter dta = new DescontoTableAdapter();
                RizmarDataSet.DescontoDataTable ddt = new RizmarDataSet.DescontoDataTable();
                ddt = dta.PesquisarDesconto(Convert.ToInt32(idTextBox.Text));
                float[] valorDesconto = new float[20];
                string[] descricao = new string[20];

                if (ddt.Rows.Count > 0)
                {
                    for (int i = 0; i < ddt.Rows.Count; i++)
                    {

                        if (ddt.Rows[i]["valor"] == null)
                        {
                            valorDesconto[i] = 0;
                        }
                        else
                            valorDesconto[i] = float.Parse(ddt.Rows[i]["valor"].ToString());

                        if (ddt.Rows[i]["descricao"] != null)
                        {
                            descricao[i] = Convert.ToString(ddt.Rows[i]["descricao"]);
                        }
                        else
                            descricao[i] = "";
                        Desconto novo = new Desconto(this);
                        if (i == 0)
                            novo.Location = (new System.Drawing.Point(0, 0));
                        else
                            novo.Location = (new System.Drawing.Point(0, descontos[n_descontos - 1].Location.Y + 114));

                        descontos.Add(novo);
                        n_descontos++;

                        panelDesconto.Controls.Add(novo);

                        descontos[i].valorDescontoTextBox.Text = Convert.ToString(valorDesconto[i]);
                        descontos[i].descricaoTextBox.Text = Convert.ToString(descricao[i]);
                        descontos[i].idDescLabel.Text = Convert.ToString(n_descontos);
                    }
                }
                else
                {
                    Desconto novo = new Desconto(this);

                    /*Configuração de alguns atributos do novo título*/
                    novo.Location = (new System.Drawing.Point(0, 0));

                    /*Adiciona novo título ao vetor de títulos*/
                    descontos.Add(novo);
                    n_descontos++;

                    /*Adiciona novo título ao painel principal*/
                    panelDesconto.Controls.Add(novo);
                }
            }
            else
            {
                limpaForm();

                Desconto novo = new Desconto(this);

                /*Configuração de alguns atributos do novo título*/
                novo.Location = (new System.Drawing.Point(0, 0));

                /*Adiciona novo título ao vetor de títulos*/
                descontos.Add(novo);
                n_descontos++;

                /*Adiciona novo título ao painel principal*/
                panelDesconto.Controls.Add(novo);
            }

        }

        private void painelDesconto_Enter(object sender, EventArgs e)
        {
            limpaForm();
            atualizaDescontos();            
        }

        private void setDescontoFields(out decimal valorDesconto, out string descricao, out bool status, out int idCliente, out int id_desconto ,Desconto desc)
        {
            if (desc.valorDescontoTextBox.Text != string.Empty)
            {
                valorDesconto = Convert.ToDecimal(desc.valorDescontoTextBox.Text.Replace('.', ','));
            }
            else
                valorDesconto = 0;
            if (desc.descricaoTextBox.Text != string.Empty)
            {
                descricao = desc.descricaoTextBox.Text;
            }
            else
                descricao = "";
            status = true;
            if (idTextBox.Text != string.Empty)
            {
                idCliente = Convert.ToInt32(idTextBox.Text);
            }
            else
            {
                idCliente = 0;
                MessageBox.Show("Selecione um cliente!");
            }
            id_desconto = Convert.ToInt32(desc.idDescLabel.Text);
        }

        private void adicionarDesconto() 
        {
            Desconto novo = new Desconto(this);

            /*Configuração de alguns atributos do novo desconto*/
            novo.Location = (new System.Drawing.Point(0, descontos[n_descontos - 1].Location.Y + 114));

            /*Adiciona novo desconto ao vetor de descontos*/
            descontos.Add(novo);
            n_descontos++;

            /*Adiciona novo desconto ao painel principal*/
            panelDesconto.Controls.Add(novo);

            novo.idDescLabel.Text = Convert.ToString(n_descontos);
        }

        private void novoDesconto_Click(object sender, EventArgs e)
        {
                if (descontos[n_descontos - 1].Completo() && idTextBox.Text != string.Empty)
                {
                    salvarDescontoNovo();
                    adicionarDesconto();
                }
                else 
                {
                    MessageBox.Show("Existe campo em branco.");
                }
        }

        public void limpaForm()
        {
            for (int i = n_descontos - 1; i >= 0; i--)
            {
                panelDesconto.Controls.Remove(panelDesconto.Controls[i]);
                descontos.RemoveAt(i);
            }

            n_descontos = 0;
            
        }

        private void addButton_Click(object sender, EventArgs e)
        {
            int i = 0;
            bool sucesso = true;
            if (telefoneComboBox.Text != "")
            {
                while (i < telefoneComboBox.Items.Count)
                {
                    if (telefoneComboBox.Items[i].ToString() == telefoneComboBox.Text)
                        sucesso = false;
                    i++;
                }
                if (sucesso)
                {
                    telefoneComboBox.Items.Add(telefoneComboBox.Text);
                    contatoComboBox.Items.Add(contatoComboBox.Text);
                    telefoneComboBox.Text = "";
                    contatoComboBox.Text = "";
                }
                else
                    MessageBox.Show("Esse número de telefone já está cadastrado.");
            }
            System.Windows.Forms.SendKeys.Send("{TAB}");
        }

        private void salvarDesconto() 
        {
            if (descontos[n_descontos - 1].Completo() && idTextBox.Text != string.Empty)
            {
                decimal valor;
                string descricaoDesconto;
                int idCliente, idDesconto;
                bool status, sucesso = false;
                RizmarDataSet.DescontoDataTable ddt = new RizmarDataSet.DescontoDataTable();
                DescontoTableAdapter dta1 = new DescontoTableAdapter();
                dta1.DeleteTodosDescontos(Convert.ToInt32(idTextBox.Text));
                foreach (Desconto d in panelDesconto.Controls)
                {
                    sucesso = false;
                    DescontoTableAdapter dta = new DescontoTableAdapter();
                    setDescontoFields(out valor, out descricaoDesconto, out status, out idCliente, out idDesconto, d);

                    if (dta.InsertDesconto(idDesconto, valor, status, descricaoDesconto, idCliente, 0) > 0)
                    {
                        sucesso = true;
                    }
                }
                if (sucesso)
                {
                    MessageBox.Show("Os descontos foram salvos.");
                }
            }
            else
                MessageBox.Show("Existem Campos em branco.");  
        }

        internal void salvarDescontoNovo()
        {
            if (descontos[n_descontos - 1].Completo() && idTextBox.Text != string.Empty)
            {
                decimal valor;
                string descricaoDesconto;
                int idCliente, idDesconto;
                bool status, sucesso = false;
                RizmarDataSet.DescontoDataTable ddt = new RizmarDataSet.DescontoDataTable();
                DescontoTableAdapter dta1 = new DescontoTableAdapter();
                dta1.DeleteTodosDescontos(Convert.ToInt32(idTextBox.Text));
                foreach (Desconto d in panelDesconto.Controls)
                {
                    sucesso = false;
                    DescontoTableAdapter dta = new DescontoTableAdapter();
                    setDescontoFields(out valor, out descricaoDesconto, out status, out idCliente, out idDesconto, d);

                    if (dta.InsertDesconto(idDesconto, valor, status, descricaoDesconto, idCliente, 0) > 0)
                    {
                        sucesso = true;
                    }
                }
               
            }
            else
                MessageBox.Show("Existem Campos em branco.");
        }

        private void salvar_Click(object sender, EventArgs e)
        {
            salvarDesconto();
        }

        private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            switch (e.ColumnIndex)
            {
                case 7:
                    //setLiquidoValue();
                    //setDesagioValue();
                    break;
                case 10:
                    //setDiasValue();
                    //setLiquidoValue();
                    //setDesagioValue();
                    break;
                case 11:
                    //setDiasValue();
                    //setLiquidoValue();
                    //setDesagioValue();
                    break;
                case 12:
                    //setDiasValue();
                    //setLiquidoValue();
                    //setDesagioValue();
                    break;
            }
        }

        public void setDiasValue()
        {
            ClienteTableAdapter cta = new ClienteTableAdapter();
            RizmarDataSet.ClienteDataTable cdt = new RizmarDataSet.ClienteDataTable();

            int d;
            int dias;
            int dMais;
            cdt = cta.PesquisaPorID(Convert.ToInt32(idTextBox.Text));
            if (cdt.Rows.Count > 0)
            {
                d = Convert.ToInt32(cdt.Rows[0][12]);

                dMais = Convert.ToInt32(dataGridView1.CurrentRow.Cells[12].Value);

                DateTime SomaDias;
                SomaDias = Convert.ToDateTime(dataGridView1.CurrentRow.Cells[11].Value);

                if (SomaDias.DayOfWeek == DayOfWeek.Sunday)
                {
                    SomaDias = SomaDias.AddDays(1);
                }
                else
                    if (SomaDias.DayOfWeek == DayOfWeek.Saturday)
                    {
                        SomaDias = SomaDias.AddDays(2);
                    }
                SomaDias = SomaDias.AddDays(d + dMais);
                TimeSpan diferenca = SomaDias.Subtract(Convert.ToDateTime(dataGridView1.CurrentRow.Cells[10].Value));
                dias = Convert.ToInt32(diferenca.Days);
                dias = dias + 2;
                dataGridView1.CurrentRow.Cells[13].Value = Convert.ToString(dias);
            }
        }

        public void setLiquidoValue()
        {
            ClienteTableAdapter cta = new ClienteTableAdapter();
            RizmarDataSet.ClienteDataTable cdt = new RizmarDataSet.ClienteDataTable();
            double taxaMensal = 0;
            double taxaADM = 0;
            double duplicata = 0;
            cdt = cta.PesquisaPorID(Convert.ToInt32(idTextBox.Text));
            if (cdt.Rows.Count > 0)
            {
                string STtaxaMensal = Convert.ToString(cdt.Rows[0]["taxa"]).Replace('.', ',');
                string STtaxaADM = Convert.ToString(cdt.Rows[0]["adm"]).Replace('.', ',');
                string STduplicata = Convert.ToString(cdt.Rows[0]["duplicata"]).Replace('.', ',');
                taxaMensal = Convert.ToDouble(STtaxaMensal);
                taxaADM = Convert.ToDouble(STtaxaADM);
                duplicata = Convert.ToDouble(STduplicata);
            }

            int dia = Convert.ToInt32(dataGridView1.CurrentRow.Cells[13].Value);
            double jurosDia = (((taxaMensal + taxaADM) * 0.01) / 30);
            double liq = 0;
            if (dataGridView1.CurrentRow.Cells[8].Value.ToString() == "Cheque")
                liq = double.Parse(dataGridView1.CurrentRow.Cells[7].Value.ToString().Replace('.', ','))-((double.Parse(dataGridView1.CurrentRow.Cells[7].Value.ToString().Replace('.', ',')) * (double)Math.Pow((1 + jurosDia), dia)) - double.Parse(dataGridView1.CurrentRow.Cells[7].Value.ToString().Replace('.', ',')));
            else
                liq = double.Parse(dataGridView1.CurrentRow.Cells[7].Value.ToString().Replace('.', ',')) - ((double.Parse(dataGridView1.CurrentRow.Cells[7].Value.ToString().Replace('.', ',')) * (double)Math.Pow((1 + jurosDia), dia)) - double.Parse(dataGridView1.CurrentRow.Cells[7].Value.ToString().Replace('.', ','))) - duplicata;
            dataGridView1.CurrentRow.Cells[15].Value = Convert.ToString(decimal.Round(Convert.ToDecimal(liq), 2));
        }
        
        public void setDesagioValue()
        {
            float pis = 0, cofins = 0, cpmf = 0, iof = 0, iss = 0, adValore = 0;
            TaxaTableAdapter tta = new TaxaTableAdapter();
            RizmarDataSet.TaxaDataTable tdt = new RizmarDataSet.TaxaDataTable();
            tdt = tta.GetData();
            if (tdt.Rows.Count > 0)
            {
                pis = float.Parse(tdt.Rows[0]["pis"].ToString());
                cofins = float.Parse(tdt.Rows[0]["cofins"].ToString());
                iof = float.Parse(tdt.Rows[0]["iof"].ToString());
                iss = float.Parse(tdt.Rows[0]["iss"].ToString());
                cpmf = float.Parse(tdt.Rows[0]["cpmf"].ToString());
                adValore = float.Parse(tdt.Rows[0]["adValore"].ToString());
            }
            double desag;
            double totalAdValore = 0;
            double taxaMensal = 0;
            double taxaAdm = 0;
            double duplicata = 0;
            ClienteTableAdapter cta = new ClienteTableAdapter();
            RizmarDataSet.ClienteDataTable cdt = new RizmarDataSet.ClienteDataTable();
            
            cdt = cta.PesquisaPorID(Convert.ToInt32(dataGridView1.CurrentRow.Cells[0].Value));
            if (cdt.Rows.Count > 0)
            {
                string STtaxaMensal = Convert.ToString(cdt.Rows[0]["taxa"]).Replace('.', ',');
                string STtaxaADM = Convert.ToString(cdt.Rows[0]["adm"]).Replace('.', ',');
                string STduplicata = Convert.ToString(cdt.Rows[0]["duplicata"]).Replace('.', ',');
                taxaMensal = Convert.ToDouble(STtaxaMensal);
                taxaAdm = Convert.ToDouble(STtaxaADM);
                duplicata = Convert.ToDouble(STduplicata);
            }

            int dia = Convert.ToInt32(dataGridView1.CurrentRow.Cells[13].Value);
            double jurosAdm = 0, jurosDesag = 0;
            jurosAdm = ((taxaAdm * 0.01) / 30);
            jurosDesag = ((taxaMensal * 0.01) / 30);
            dataGridView1.CurrentRow.Cells[22].Value = double.Parse(dataGridView1.CurrentRow.Cells[7].Value.ToString().Replace('.', ',')) * (double)Math.Pow((1 + jurosAdm), dia) - double.Parse(dataGridView1.CurrentRow.Cells[7].Value.ToString().Replace('.', ','));
            desag = double.Parse(dataGridView1.CurrentRow.Cells[7].Value.ToString().Replace('.', ',')) * (double)Math.Pow((1 + jurosDesag), dia) - double.Parse(dataGridView1.CurrentRow.Cells[7].Value.ToString().Replace('.', ','));
            totalAdValore = adValore * (taxaAdm * desag);
            if (Convert.ToBoolean(dataGridView1.CurrentRow.Cells[17].Value) == true)
                desag = desag - (desag + totalAdValore) * ((pis + cofins) / 100) - float.Parse(dataGridView1.CurrentRow.Cells[7].Value.ToString()) * (iof / 100) - (iss / 100) * totalAdValore - (cpmf / 100) * float.Parse(dataGridView1.CurrentRow.Cells[15].Value.ToString());
            dataGridView1.CurrentRow.Cells[14].Value = Convert.ToString(decimal.Round(Convert.ToDecimal(desag), 2));
        }
        
        private void confirmarButton_Click(object sender, EventArgs e)
        {
           DialogResult result = MessageBox.Show("Tem certeza que deseja efetuar as alterações?","Atenção",MessageBoxButtons.OKCancel,MessageBoxIcon.Warning);
           if (result == DialogResult.OK)
           {
               int i = 0;
               while (i < dataGridView1.RowCount)
               {
                   tituloTableAdapter.UpdateValor(Convert.ToInt32(dataGridView1.Rows[i].Cells[6].Value), Convert.ToInt32(dataGridView1.Rows[i].Cells[15].Value));
                   tituloTableAdapter.UpdateDataBase(dataGridView1.Rows[i].Cells[9].Value.ToString(), Convert.ToInt32(dataGridView1.Rows[i].Cells[15].Value));
                   tituloTableAdapter.UpdateVencimento(dataGridView1.Rows[i].Cells[10].Value.ToString(), Convert.ToInt32(dataGridView1.Rows[i].Cells[15].Value));
                   //tituloTableAdapter.UpdateD(Convert.ToInt32(dataGridView1.Rows[i].Cells[12].Value), Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value));
                   tituloTableAdapter.UpdateDias(Convert.ToInt32(dataGridView1.Rows[i].Cells[12].Value), Convert.ToInt32(dataGridView1.Rows[i].Cells[15].Value));
                   //tituloTableAdapter.UpdateDesagio(Convert.ToDecimal(dataGridView1.Rows[i].Cells[14].Value), Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value));
                   tituloTableAdapter.UpdateLiquido(Convert.ToDecimal(dataGridView1.Rows[i].Cells[14].Value), Convert.ToInt32(dataGridView1.Rows[i].Cells[15].Value));
                   //tituloTableAdapter.UpdateTaxaADM(Convert.ToDecimal(dataGridView1.Rows[i].Cells[22].Value), Convert.ToInt32(dataGridView1.Rows[i].Cells[0].Value));
                   i++;
               }
               MessageBox.Show("Os dados foram alterados com sucesso.");
               settotalLabel();
           }

        }
        private void cpfRadioButton_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '\r')
            {
                e.Handled = true;
                System.Windows.Forms.SendKeys.Send("{TAB}");
            }
        }

        private void cnpjRadioButton_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar == '\r')
            {
                e.Handled = true;
                System.Windows.Forms.SendKeys.Send("{TAB}");
            }
        }

        private void cnpjRadioButton_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void visualizarButton_Click(object sender, EventArgs e)
        {
            RelatorioForm novo = new RelatorioForm(this);
            novo.ShowDialog();
        }

        internal void settotalLabel()
        {
            decimal soma = 0;
           
            for (int i = 0; i < dataGridView1.RowCount; i++)
            {
            soma += Convert.ToDecimal(dataGridView1.Rows[i].Cells[6].Value);
            }
            totalLabel.Text = soma.ToString();
        }
        
        private void adicionarButton_Click(object sender, EventArgs e)
        {
            TituloTableAdapter tta = new TituloTableAdapter();
            tta.InsertQuery(Convert.ToInt32(idTextBox.Text), 1, 1, "", Convert.ToDecimal(valorAdd.Text), true, "", "08/08/2011", "08/08/2011", 0, 0, 0, 0, true, true, true, 0);
            atualizaDataGrid();
        }

        private void cEPTextBox_TextChanged(object sender, EventArgs e)
        {
            if (cEPTextBox.Text.Length == 5)
                cEPTextBox.AppendText("-");
        }

        private void cEPTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (e.KeyChar.Equals(Convert.ToChar(Keys.Back)))
            {
                if (cEPTextBox.Text.EndsWith("-"))
                {
                    e.Handled = true;
                    cEPTextBox.Text = cEPTextBox.Text.Remove(cEPTextBox.Text.Length - 1);
                    cEPTextBox.Text = cEPTextBox.Text.Remove(cEPTextBox.Text.Length - 2);
                    cEPTextBox.Select(cEPTextBox.Text.Length, 0);
                }

            }
            if (char.IsDigit(e.KeyChar))
              if (cEPTextBox.Text.Length == 9)
                e.Handled = true;
            numeroTextBox_KeyPress(sender, e);
        }

        private void documentoTextBox_Leave(object sender, EventArgs e)
        {
            ClienteTableAdapter cta = new ClienteTableAdapter();
            RizmarDataSet.ClienteDataTable cdt = new RizmarDataSet.ClienteDataTable();
            if (documentoTextBox.Text != "")
            {
                cdt = cta.PesquisaPorDocumento(documentoTextBox.Text);
                if (cdt.Rows.Count > 0)
                {
                    MessageBox.Show("Já existe um cliente cadastrado com esse documento.");
                    documentoTextBox.Focus();
                    documentoTextBox.SelectAll();
                }
            }
        }
        
    }
}
